/**
 * 常用工具类
 * last update time 2016-01-26
 * 描述：检查邮箱电话格式，获取url参数等常用方法
 * 功能：1.显示，关闭loading动画
 *       2.获取url中的参数
 *       3.邮箱，手机，身份证检查
 *       4.根据身份证获取出生日期
 *       5.显示错误信息
 *       6.只能输入数字检查
 * 实例：myUtil.checkEmail(value);
 */
var myUtil = function () {
    var privateValue = '';
    var privateFun = function () {

    };

    /**
     * 显示loading动画（目前只针对element）
     * @param options
     */
    var blockUI = function (options) {
        var element = $(options.target);
        if (element.length) {
            element.block({
                message: '<div class="loading-message loading-message-boxed"><img src="/scripts/blockui/loading-spinner-blue.gif" align=""><span>&nbsp;&nbsp;' + options.message + '</span></div>',
                css: {
                    top: '10%',
                    border: '0',
                    padding: '0',
                    backgroundColor: 'none'
                },
                overlayCSS: {
                    backgroundColor: '#555',
                    opacity: 0.05,
                    cursor: 'wait'
                }
            });
        }
    };

    /**
     * 取消loading动画显示
     * @param target
     */
    var unblockUI = function (target) {
        var element = $(target);
        if (element) {
            $(element).unblock({
                onUnblock: function () {
                    $(element).css('position', '');
                    $(element).css('zoom', '');
                }
            });
        } else {
            $.unblockUI();
        }
    };

    /**
     * 获取url中的参数
     * @param name
     * @returns {null}
     */
    var getUrlParam = function (name) {
        // 使用正则分析法
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        var r = window.location.search.substr(1).match(reg);
        if (r != null) return unescape(r[2]);
        return null;
    };

    /**
     * 只能输入数字
     */
    var onlyNumber = function () {
        this.value = this.value.replace(/\D/g, '');
    };

    /**
     * 显示错误信息
     * @param element
     * @param errMsg
     */
    var showError = function (element, errMsg) {
        toastr.warning(errMsg);
        try {
            element.focus();
        } catch (e) {

        }
    };

    /**
     * 根据身份证获取出生日期
     * @param value
     * @returns {string}
     */
    var getBirthByIDCard = function (value) {
        return value.substring(6, 10) + "-" + value.substring(10, 12) + "-" + value.substring(12, 14);
    };

    /**
     * 身份证验证方法
     * @param value
     * @returns {boolean}
     */
    var checkIDCard = function (value) {
        //15位数身份证正则表达式
        //var arg1 = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
        //18位数身份证正则表达式
        var arg2 = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[A-Z])$/;
        //if (str.match(arg1) == null && str.match(arg2) == null) {
        return value.match(arg2) !== null;
    };

    /**
     * 判断是否为手机号
     * @param value
     * @returns {boolean}
     */
    var checkMobile = function (value) {
        var regex = /^[1][0-9][0-9]{9}$/;
        return regex.test(value);
    };

    /**
     * 判断是否为邮箱
     * @param value
     * @returns {boolean}
     */
    var checkEmail = function (value) {
        var regex = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
        return regex.test(value);
    };

    return {
        blockUI: blockUI,
        unblockUI: unblockUI,
        getUrlParam: getUrlParam,
        onlyNumber: onlyNumber,
        showError: showError,
        getBirthByIDCard: getBirthByIDCard,
        checkIDCard: checkIDCard,
        checkMobile: checkMobile,
        checkEmail: checkEmail
    };
}();